# -*- coding: utf-8 -*-
"""
Highcharts Demos
3D scatter chart: http://www.highcharts.com/demo/3d-scatter-draggable
"""

from highcharts import Highchart
H = Highchart(width=550, height=400)

"""
This plot has two special features:
1. color setting: the javascript setting in the beginning, which can be added by colors option in our options dict
the option_dict in color option can be string (as shown below), list, or dict.
2. roatation capability: the javascript function can be added using add_3dRoatation method (no input), which will 
add the function into the chart
"""

options = {
	'chart': {
        'renderTo': 'container',
        'margin': 100,
        'type': 'scatter',
        'options3d': {
            'enabled': True,
            'alpha': 10,
            'beta': 30,
            'depth': 250,
            'viewDistance': 5,

            'frame': {
                'bottom': { 'size': 1, 'color': 'rgba(0,0,0,0.02)' },
                'back': { 'size': 1, 'color': 'rgba(0,0,0,0.04)' },
                'side': { 'size': 1, 'color': 'rgba(0,0,0,0.06)' }
            }
        }
    },
    'colors': """Highcharts.getOptions().colors = $.map(Highcharts.getOptions().colors, function (color) {
        return {
            radialGradient: {
                cx: 0.4,
                cy: 0.3,
                r: 0.5
            },
            stops: [
                [0, color],
                [1, Highcharts.Color(color).brighten(-0.2).get('rgb')]
            ]
        };
    })""", # color setting, this function is to give points 3D like feeling

    'title': {
        'text': 'Draggable box'
    },
    'subtitle': {
        'text': 'Click and drag the plot area to rotate in space'
    },
    'plotOptions': {
        'scatter': {
            'width': 10,
            'height': 10,
            'depth': 10
        }
    },
    'yAxis': {
        'min': 0,
        'max': 10,
        'title': None
    },
    'xAxis': {
        'min': 0,
        'max': 10,
        'gridLineWidth': 1
    },
    'zAxis': {
        'min': 0,
        'max': 10,
        'showFirstLabel': False
    },
    'legend': {
        'enabled': False
    },
}

data = [[1, 6, 5], [8, 7, 9], [1, 3, 4], [4, 6, 8], [5, 7, 7], [6, 9, 6], [7, 0, 5], [2, 3, 3], [3, 9, 8], 
        [3, 6, 5], [4, 9, 4], [2, 3, 3], [6, 9, 9], [0, 7, 0], [7, 7, 9], [7, 2, 9], [0, 6, 2], [4, 6, 7], 
        [3, 7, 7], [0, 1, 7], [2, 8, 6], [2, 3, 7], [6, 4, 8], [3, 5, 9], [7, 9, 5], [3, 1, 7], [4, 4, 2], 
        [3, 6, 2], [3, 1, 6], [6, 8, 5], [6, 6, 7], [4, 1, 1], [7, 2, 7], [7, 7, 0], [8, 8, 9], [9, 4, 1], 
        [8, 3, 4], [9, 8, 9], [3, 5, 3], [0, 2, 4], [6, 0, 2], [2, 1, 3], [5, 8, 9], [2, 1, 1], [9, 7, 6],
        [3, 0, 2], [9, 9, 0], [3, 4, 8], [2, 6, 1], [8, 9, 2], [7, 6, 5], [6, 3, 1], [9, 3, 1], [8, 9, 3],
        [9, 1, 0], [3, 8, 7], [8, 0, 0], [4, 9, 7], [8, 6, 2], [4, 3, 0], [2, 3, 5], [9, 1, 4], [1, 1, 4], 
        [6, 0, 2], [6, 1, 6], [3, 8, 8], [8, 8, 7], [5, 5, 0], [3, 9, 6], [5, 4, 3], [6, 8, 3], [0, 1, 5], 
        [6, 7, 3], [8, 3, 2], [3, 8, 3], [2, 1, 6], [4, 6, 7], [8, 9, 9], [5, 4, 2], [6, 1, 3], [6, 9, 5], 
        [4, 8, 2], [9, 7, 4], [5, 4, 2], [9, 6, 1], [2, 7, 3], [4, 5, 4], [6, 8, 1], [3, 4, 0], [2, 2, 6], 
        [5, 1, 2], [9, 9, 7], [6, 9, 9], [8, 4, 3], [4, 1, 7], [6, 2, 5], [0, 4, 9], [3, 5, 9], [6, 9, 1], 
        [1, 9, 2]]
    
H.set_dict_options(options)
H.add_data_set(data, 'scatter', 'Reading', colorByPoint= True)
H.add_3d_rotation() # add rotation function

H.htmlcontent